package test.enba.mq.producer.controller.kafka;

import com.enba.boot.mq.MqHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/kafka")
public class KafkaController {

  @Autowired private MqHelper mqHelper;

  /*
  Kafka中没有传统意义上的队列概念，但通过设置消费者组可以模拟出类似点对点的效果
  在 Kafka 中，点对点模式可以通过为消费者指定唯一的消费者组来实现。同一消费者组内的消费者实例会竞争消费主题中的消息，即每条消息只会被组内的一个消费者消费。
   * */

  /**
   * queue 发送消息
   *
   * @param message
   * @return
   */
  @PostMapping("/queue/send-message")
  public ResponseEntity<String> sendMessageByQueue(@RequestParam String message) {

    return mqHelper.sendMessageByQueue("test_topic", message, () -> ResponseEntity.ok("发送队列消息成功"));
  }

  /**
   * topic 发送消息
   *
   * @param message
   * @return
   */
  @PostMapping("/topic/send-message")
  public ResponseEntity<String> sendMessageByTopic(@RequestParam String message) {

    return mqHelper.sendMessageByTopic("test_topic", message, () -> ResponseEntity.ok("发送队列消息成功"));
  }
}
